Small computer system interface (SCSI) is a set of standards for connecting and transferring data between computing systems including storage systems and peripheral computing devices. The SCSI standard defines command sets for a variety of device types and communications between the varieties of device types. Thus, it hides complexity of computing systems in communication, and makes computing systems independent from each other. In addition, SCSI provides high communication speed between computing systems (for example, ultra-640 offers interface speed at 640 MB/second). Because these features, SCSI has been popular since its inception in 1980s.
SCSI as an interface standard was limited to small computer systems at the beginning. In the early days of SCSI development, SCSI interfaces were limited to point to point system. Also SCSI supports only small number of devices (e.g., up to 8) addressable by logical unit numbers (LUNs), and it supports communication within limited distances (e.g., 25 meters in SCSI or 12 meters in ultra SCSI). Much progress has been made to move pass these limitations. For example, Internet small computer system interface (iSCSI) is an Internet Protocol (IP) based storage networking standard developed for applications such as linking data storage facilities. In an iSCSI-based system, SCSI commands are carried over IP networks, and iSCSI facilitates data transfers over intranets or the Internet and manages storage over long distance. With that, iSCSI can be used to transmit data over local area networks (LANs), wide area networks (WANs), storage area networks (SANs), or the Internet. It enables location-independent data storage and retrieval over long distances using existing network infrastructure. Thus iSCSI and other variations of SCSI have gained popularity. For this specification, iSCSI and any SCSI enhancement/variations are considered as a part of the SCSI protocol family, and the methods and apparatus disclosed herein are applicable to the SCSI protocol family.
With SCSI as a protocol family in a variety of operating environments now provides a much broader spectrum of services than originally conceived, enhancing performance of a SCSI system is desirable. Particularly, executing of SCSI commands at a SCSI target involves a variety of operations and these operations can be stuck in processing, which results in degraded performance of the SCSI target. It is desirable to reduce the happening of slow or stuck SCSI commands and also to recover gracefully upon encountering slow or stuck SCSI commands in execution at a SCSI target.